//
//  Problem1668.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/3/28.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1668. 最大重复子字符串 【字符对比】
 给你一个字符串 sequence ，如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串，那么单词 word 的 重复值为 k 。单词 word 的 最大重复值 是单词 word 在 sequence 中最大的重复值。如果 word 不是 sequence 的子串，那么重复值 k 为 0 。

 给你一个字符串 sequence 和 word ，请你返回 最大重复值 k 。

 示例 1：
     输入：sequence = "ababc", word = "ab"
     输出：2
     解释："abab" 是 "ababc" 的子字符串。
 示例 2：
     输入：sequence = "ababc", word = "ba"
     输出：1
     解释："ba" 是 "ababc" 的子字符串，但 "baba" 不是 "ababc" 的子字符串。
 示例 3：
     输入：sequence = "ababc", word = "ac"
     输出：0
     解释："ac" 不是 "ababc" 的子字符串。
 提示：
     1 <= sequence.length <= 100
     1 <= word.length <= 100
     sequence 和 word 都只包含小写英文字母。
 */
@objcMembers class Problem1668: NSObject {
    func solution() {
//        print(maxRepeating("ababc", "ab"))
//        print(maxRepeating("ababc", "ba"))
//        print(maxRepeating("ababc", "ac"))
//        print(maxRepeating("a", "a"))
//        print(maxRepeating("ababcabababfdfdsab", "ab"))
        print(maxRepeatingIndex("aaabaaaabaaabaaaabaaaabaaaabaaaaba", "aaaba"))
    }
    
    /*
     1: 创建一个指针p，指向sequence中第一个和word首字母相同的索引
     2: 校验从p开始与word是否相等，如果不相等，让p+1，相等p+word.length
     */
    func maxRepeating(_ sequence: String, _ word: String) -> Int {
        if word.count > sequence.count {
            return 0
        }
        var result = 0
        var p = -1
        let chartsS = Array(sequence)
        let charts = Array(word)
        
        var i = 0
        while i < chartsS.count - charts.count + 1 {
            if p == -1 {
                if chartsS[i] == charts[0] {
                    p = i
                }
            }
            
            if p != -1 {
                var temp = 0
                var k = 0
                for j in i..<chartsS.count {
                    if chartsS[j] == charts[k] {
                        k+=1
                    } else {
                        break
                    }
                    if k == charts.count {
                        temp += 1
                        k = 0
                    }
                }
                if temp > 0 {           // 说明找打匹配的
                    result = max(result, temp)
                    p = -1
                } else {
                    p = -1
                }
            }
            i += 1
        }
        
        return result
    }
    
    /*
     使用系统的方法contains
     1: 首先确认sequence是否包含一个word，如果包含，那么确定result至少是1
     2: 然后确认sequence是否包含2个word，如果包含，那么确定result至少是2
     3: 依次类推
     */
    func maxRepeatingIndex(_ sequence: String, _ word: String) -> Int {
        var result = 0
        var str = word
        while sequence.contains(str) == true {
            str += word
            result += 1
        }
        
        return result
    }
}
